iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 10
0
自我挑戰組

邁向 JavaScript 核心之路 系列 第 10

[Day 10] JavaScript 語法特性 - 嚴格模式

  • 分享至 

  • xImage
  •  

嚴格模式是指可以讓 JavaScript 的語法變得更嚴謹,相對於原本的語法來說,在執行時較不容易出錯。

那該如何使用呢?

其實非常簡單,若整隻檔案都要套用嚴格模式,只需要在檔案的最前方加上 "use strict"即可,當然,我們也可以只針對個別的函式去做設定,例如像以下這段程式碼

    // 在函式內單獨使用嚴格模式
    
    function f(x) {
        "use strict"
        var a = 12;
        b = a + x;
    }
    f(5) // 會報錯,因為嚴格模式下,不能使用未宣告變數

也就是在函式的最頂端加上 "use strict"即可。

接下來,就讓我們來說說什麼樣的情況,在嚴格模式下會發生 error 吧!

  • 未宣告使用變數
  • 嘗試寫入唯獨屬性
  • 對無法擴充的物件新增屬性
  • 使用 delete 刪除變數、函式和屬性
  • 定義重複的屬性或參數
  • 使用未來的保留字 ex. implements, interface, let, package, private, protected, public, static, yield 等
  • 使用 eval 或 arguments 名稱當做變數或函式名稱
  • 在 if 或 for 區塊內宣告變數
  • 使用 with,使用在 eval 語句宣告的變數
  • 修改 arguments 內的值
  • 使用 arguments.callee

下面我會針對較常使用到的情境去做程式碼範例,如果有同學對於 eval、callee 等名詞較為陌生,我在文末也會附上相關資料提供參考。

    // 未宣告使用變數
    (function() {
        "use strict";
        testvar = 4;
    })();
    
    // 定義重複的屬性
    (function() {
        "use strict";
        var Obj = {
            height: 10,
            width: 15,
            height: 20
        };
    })(); 
    
    // 定義重複的參數
    
    (function() {
        "use strict";
        function foo(name, name) {
            return name;
        };
    })();
    
    // 如果不是在 strict 模式下,testvar 的值是全域物件,但是其值在 strict 模式下則是 undefined。
    
    (function() {
        "use strict";
        function testFunc() {
            return this;
        }
        var testvar = testFunc();
    })();
    
    // 在 if 或 for 區塊內宣告變數
    
    (function() {
        "use strict";
        if (true) {
            function run() {
                console.log("run");
            }
        }
        run();
    })();
    

以上就是日常生活中,同學們在嚴格模式下,較容易出現的錯誤,有時候我會在撰寫 JavaScript 時,加上嚴格模式,來導正一些自己的壞習慣,雖然一開始會覺得不太適應,但對長遠來說,一定是有幫助的哦!各位同學不妨試著在嚴格模式下來做開發,相信會有一些幫助哦。


不知不覺,鐵人賽已經走到了三分之一,好像已經漸漸習慣了這樣的步調?

參考資料:
Tommy - 深入 JavaScript 核心課程
卡斯柏 - JavaScript 的嚴格模式 "use strict"
MDN - arguments.callee
MDN - eval()


上一篇
[Day 9] JavaScript 語法特性 - Hoisting
下一篇
[Day 11] JavaScript 寫作風格
系列文
邁向 JavaScript 核心之路 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言